'use strict';
import axios from 'axios';
import {
  Toast
} from 'vant';
// import {
//   Base64
// } from 'js-base64';

const instance = axios.create();

// 拦截request,设置全局请求为ajax请求
instance.interceptors.request.use(config => {
  config = {
    ...config,
    // `xsrfCookieName` 是用作 xsrf token 的值的cookie的名称
    xsrfCookieName: 'csrfToken', // default
    // `xsrfHeaderName` 是承载 xsrf token 的值的 HTTP 头的名称
    xsrfHeaderName: 'x-csrf-token', // 默认的
  };
  Toast.loading();
  return config;
}, error => {
  Toast.clear();
  checkError(error);
  return Promise.reject(error);
});

// 添加响应拦截器
instance.interceptors.response.use(response => {
  // 对响应数据做点什么
  Toast.clear();
  const { config, data, headers, request, status } = response;

  if (status >= 200 && status < 300) {

    if (data.status !== 'success') {
      console.log('data');
      const error = new Error(data.message);
      error.response = response;
      onGlobalError(error);
      throw error;
    } else {
      return data;
    }

  } else {
    const error = new Error(response.message);
    error.response = response;
    checkError(error);
    throw error;
  }
}, error => {
  // 对响应错误做点什么
  Toast.clear();
  checkError(error);
  return Promise.reject(error);
});

async function GET(url, params = {}) {
  return await instance.get(url, {
    params
  });
}

async function DELETE(url, data = {}) {
  return await instance.delete(url, data);
}

async function PUT(url, data = {}) {
  return await instance.put(url, data);
}

async function POST(url, data = {}) {
  return await instance.post(url, data);
}

async function PATCH(url, data = {}) {
  return await instance.patch(url, data);
}

async function ALL(fetchFunc = []) {
  return await instance.all(fetchFunc);
}

function checkError(err) {
  const error = new Error(err.response.data.error);
  if (error) {
    onGlobalError(err.response.data.error);
  }
  return error;
}

function onGlobalError(error) {
  // 处理全局异常的捕获
  if (error && error.message) {
    Toast.fail(error.message);
  }
  // throw error;
  // console.warn(error);
}

export {
  GET,
  PUT,
  POST,
  DELETE,
  PATCH,
  ALL
};
